
package Faxada;

import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.abenildo.controle.Biblioteca;
import br.com.abenildo.controle.ControladorBiblioteca;
import br.com.abenildo.controle.ControladorDeficiente;
import br.com.abenildo.controle.ControladorLivro;
import br.com.abenildo.controle.Deficiente;
import br.com.abenildo.controle.Livro;
import br.com.abenildo.exception.BibliotecaJaCadastradoException;
import br.com.abenildo.exception.BibliotecaNaoEncontradoException;
import br.com.abenildo.exception.CNPJinvalidoException;
import br.com.abenildo.exception.CPFinvalidoException;
import br.com.abenildo.exception.CodLivroInvalidoException;
import br.com.abenildo.exception.DeficienteJaCadastradoException;
import br.com.abenildo.exception.DeficienteNaoEncontradoException;
import br.com.abenildo.exception.LivroJaCadastradoException;
import br.com.abenildo.exception.LivroNaoEncontradoException;
import br.com.abenildo.exception.RepositorioException;

public class TestarFachada {
	
	private static TestarFachada instance = null;
	private ControladorDeficiente controladorDeficiente;
	private ControladorBiblioteca controladorBiblioteca;
	private ControladorLivro controladorlivro;
	
	TestarFachada() throws Exception {
		this.controladorDeficiente 	= new ControladorDeficiente();
//		this.controladorBiblioteca = new ControladorBiblioteca();
//		this.controladorlivro = new ControladorLivro();
	}
	
	public static TestarFachada getInstance() throws Exception {
		if (TestarFachada.instance == null) {
			TestarFachada.instance = new TestarFachada();
		}
		return TestarFachada.instance;
	}
	
	public void cadastrarDeficiente(Deficiente deficiente) throws DeficienteJaCadastradoException, RepositorioException, CPFinvalidoException, SQLException{
		this.controladorDeficiente.cadastrarDeficiente(deficiente);
	}
	
	public Deficiente procurarDeficiente(String cpf) throws DeficienteNaoEncontradoException, RepositorioException, CPFinvalidoException, SQLException {
		return this.controladorDeficiente.procurarDeficiente(cpf);
	}
	
	public void DeficienteAtualizar(Deficiente deficiente) throws DeficienteNaoEncontradoException, RepositorioException, CPFinvalidoException, SQLException {
		this.controladorDeficiente.atualizarDeficiente(deficiente);
	}
	
	public void removerDeficiente(String cpf) throws DeficienteNaoEncontradoException, RepositorioException, CPFinvalidoException, SQLException {
		this.controladorDeficiente.removerDeficiente(cpf);
	}
	
	public ArrayList<Deficiente> listarDeficiente() throws SQLException {
		return this.controladorDeficiente.listarDeficiente();
	}
	
	public void salvarDeficiente(List<Deficiente> deficiente)throws FileNotFoundException, RepositorioException, SQLException {
		this.controladorDeficiente.salvarDeficiente(deficiente);
	}
	
	public void cadastrarBiblioteca(Biblioteca biblioteca)throws BibliotecaJaCadastradoException, RepositorioException, CNPJinvalidoException, SQLException{
		this.controladorBiblioteca.cadastrarBiblioteca(biblioteca);
	}
	
	public Biblioteca procurarBiblioteca(String cnpj)throws BibliotecaNaoEncontradoException,RepositorioException,CNPJinvalidoException,SQLException{
		return this.controladorBiblioteca.procurarBiblioteca(cnpj);
	}
	
	public void atualizarBiblioteca(Biblioteca biblioteca)throws BibliotecaNaoEncontradoException,RepositorioException,CNPJinvalidoException,SQLException{
		this.controladorBiblioteca.atualizarBiblioteca(biblioteca);
	}
	
	public void removerBiblioteca(String cnpj)throws BibliotecaNaoEncontradoException,RepositorioException,CNPJinvalidoException,SQLException{
		this.controladorBiblioteca.removerBiblioteca(cnpj);
	}
	
	public ArrayList<Biblioteca>listarBiblioteca()throws SQLException{
		return this.controladorBiblioteca.listarBiblioteca();
	}
	
	public void cadastrarLivro(Livro livro)throws LivroJaCadastradoException,RepositorioException,SQLException, CodLivroInvalidoException, Exception{
		this.controladorlivro.cadastrarLivro(livro);
	}
	
	public Livro procurarLivro(int CodLivro)throws LivroNaoEncontradoException,RepositorioException,CodLivroInvalidoException,SQLException{
		return this.controladorlivro.procurarLivro(CodLivro);
	}
	
	public void atualizarLivro(Livro livro)throws LivroNaoEncontradoException,RepositorioException,CodLivroInvalidoException,SQLException{
		this.controladorlivro.atualizarLivro(livro);
	}
	
	 public void removerLivro(int CodLivro)throws LivroNaoEncontradoException,RepositorioException,CodLivroInvalidoException,SQLException{
		 this.controladorlivro.removerLivro(CodLivro);
	 }
	 
	 public ArrayList<Livro>listarLivro()throws SQLException{
		 return this.controladorlivro.listarLivro();
	 }
}



